/* 计算二叉树中所有双分支的节点个数 */
#include <iostream>
#include "BiTreefun.h"
using namespace std;

// 计算双分支结点个数
int count(BTNode *p)
{
  int n1, n2;
  
  // 二叉树为空
  if (p == NULL)
    return 0;
  
  // 根结点为双分支结点
  if (p->lchild && p->rchild)
  {
    // 计算左子树的双分支结点个数
    n1 = count(p->lchild);
    
    // 计算右子树的双分支结点个数
    n2 = count(p->rchild);
    
    // 返回双分支结点个数
    return n1 + n2 + 1;
  }
  
  // 根结点不为双分支结点
  else
  {
    // 计算左子树的双分支结点个数
    n1 = count(p->lchild);
    
    // 计算右子树的双分支结点个数
    n2 = count(p->rchild);
    
    // 返回双分支结点个数
    return n1 + n2;
  }
}
int main()
{
  // 创建二叉树
  BTNode *T = create_bitree();
  
  // 计算双分支结点个数
  cout << "二叉树的双分支结点个数:" << count(T);
  return 0;
}